#include <thread>
#include <queue>
#include <condition_variable>
#include <mutex>

using std::queue;
using std::mutex;
using std::condition_variable;

class TaskQueue
{
public:
    TaskQueue(size_t queSize): _queSize(queSize){}
    ~TaskQueue(){}
    void push(const int& value);
    int pop();
    bool full(){return _que.size() == _queSize;}
    bool empty(){return _que.empty();}
private:
    size_t _queSize;
    queue<int> _que;
    mutex _mutex;
    condition_variable _notEmpty;
    condition_variable _notFull;
};

class Producer
{
public:
    void producer(TaskQueue& que);
};

class Consumer
{
public:

private:
    
};



